Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

backport: merge bitcoin#24460, #27672, #27766, #28065, #30228, partial bitcoin#28349, #28579 (drop c++17 support) #6380

Merged
merged 13 commits into from
Feb 15, 2025

Conversation

kwvg
Copy link
Collaborator

@kwvg kwvg commented Nov 2, 2024

Additional Information

Breaking changes

None expected.

Checklist

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas (note: N/A)
  • I have added or updated relevant unit/integration/functional/e2e tests (note: N/A)
  • I have made corresponding changes to the documentation (note: N/A)
  • I have assigned this pull request to a milestone (for repository code-owners and collaborators only)

@kwvg kwvg added this to the 23 milestone Nov 2, 2024
PastaPastaPasta added a commit that referenced this pull request Nov 4, 2024
…as c0b716f2

f18e839 build: drop symlinks in immer subtree (Kittywhiskers Van Gogh)
d761111 build: fix gitian builds (Kittywhiskers Van Gogh)
a9f46b3 Squashed 'src/immer/' changes from 9cb6a5a845..5875f7739a (Kittywhiskers Van Gogh)
e4ee302 revert: fix gitian builds (Kittywhiskers Van Gogh)
fb00300 revert: drop symlinks in immer subtree (Kittywhiskers Van Gogh)

Pull request description:

  ## Additional Information

  * Dependency for #6380

  #6380 will be using `std::ranges` as a replacement for [dash#4622](#4622) and currently, it will fail to compile due to the current version of `immer` (last updated two years ago in #4911) not meeting constraints ([source](https://en.cppreference.com/w/cpp/language/constraints)) set by `std::ranges` (see below).

  ```
  ./evo/deterministicmns.h:243:16: error: no matching function for call to object of type 'const __count_if_fn'
          return ranges::count_if(mnMap, [](const auto& p) { return IsMNValid(*p.second); });
                 ^~~~~~~~~~~~~~~~
  /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/ranges_algo.h:331:7: note: candidate template ignored: substitution failure [with _Range = const MnMap &, _Proj = identity, _Pred = (lambda at ./evo/deterministicmns.h:243:40)]: constraints not satisfied for alias template 'range_difference_t' [with _Range = const immer::map<uint256, std::shared_ptr<const CDeterministicMN>, CDeterministicMNList::ImmerHasher> &]
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        ^
  /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/ranges_algo.h:316:7: note: candidate function template not viable: requires at least 3 arguments, but 2 were provided
        operator()(_Iter __first, _Sent __last,
        ^
  ```

  This has been resolved by updating `immer` to the latest available release, [v0.8.1](https://github.com/arximboldi/immer/releases/tag/v0.8.1).

  Expected subtree hash **without changes** are `a5ded361aec714bc74149909c5e1984c10ab132c4c539c63fe57362dccd95556` (see [here](#6323 (review)) for verification instructions).

  ## Breaking Changes

  None expected.

  ## Checklist

  - [x] I have performed a self-review of my own code **(note: N/A)**
  - [x] I have commented my code, particularly in hard-to-understand areas **(note: N/A)**
  - [x] I have added or updated relevant unit/integration/functional/e2e tests **(note: N/A)**
  - [x] I have made corresponding changes to the documentation **(note: N/A)**
  - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_

ACKs for top commit:
  PastaPastaPasta:
    utACK f18e839
  UdjinM6:
    utACK f18e839

Tree-SHA512: 99d1b577eb4cf3fcc3ebfd28f19006700f085d23ccdabe802a2aa5844e4b39314347b0c0e49a352c5fc034d6584a0109edf08fa3c0846514967f1fb16e7f127a
@kwvg kwvg changed the title refactor: remove C++17 workarounds backport: merge bitcoin#24460, #27672, #27766, #28065, #30228, partial bitcoin#28349, #28579 (drop c++17 support) Feb 8, 2025
Copy link

This pull request has conflicts, please rebase.

PastaPastaPasta added a commit that referenced this pull request Feb 12, 2025
…oble`), merge bitcoin#29985

1599cc6 fix: suppress `float-cast-overflow` UBSan error from `qRound(double)` (Kittywhiskers Van Gogh)
a57d128 ci: drop i386 conditional altogether, we don't need `wine32` anymore (Kittywhiskers Van Gogh)
b862411 ci: drop conflicting `g++-multilib` package and related workaround (Kittywhiskers Van Gogh)
7b1caa9 fix: remove now-invalid package entry (Kittywhiskers Van Gogh)
9f9e965 fix: use default non-root user `ubuntu` introduced in Ubuntu 22.10 (Kittywhiskers Van Gogh)
9b4c95e ci: update containers and CI to use Ubuntu 24.04 LTS (`noble`) (Kittywhiskers Van Gogh)
8aec25b merge bitcoin#29985: Fix build of Qt for 32-bit platforms with recent glibc (Kittywhiskers Van Gogh)

Pull request description:

  ## Motivation

  Since [dash#6389](#6389), the minimum supported version of GCC has been 11.1 or later. Our current base, Ubuntu 22.04 LTS (`jammy`) ships with GCC 11.2 ([source](https://packages.ubuntu.com/jammy/gcc)). The cross-compilation package for `arm-linux-gnueabihf` is GCC 11.2 as well ([source](https://packages.ubuntu.com/jammy/gcc-arm-linux-gnueabihf)). Unfortunately, this isn't the case for `mingw-w64-x86-64`, which ships with GCC 10.3 ([source](https://packages.ubuntu.com/jammy/gcc-mingw-w64-x86-64-posix)).

  So far, an workaround was utilized to allow GCC 10.3 to pass muster upstream through bitcoin#28379 ([source](bitcoin@fa67f09#diff-0baeabda402ee522682c25cef25a248ff6d9e2904f6d66f93f6babf55b576675L986)). Dash Core's enablement of C++20 experimental support in [dash#4600](#4600) was relatively even more permissive ([source](https://github.com/dashpay/dash/pull/4600/files#diff-0baeabda402ee522682c25cef25a248ff6d9e2904f6d66f93f6babf55b576675R168)).

  Though since then, enforcement of those newer minimum requirements through backports like [bitcoin#30228](bitcoin#30228) are frustrated by the version of GCC shipped for Windows cross-compilation.

  This can be resolved by bumping the image to the next available LTS release, Ubuntu 24.04 (`noble`), which ships with GCC 13.2 natively ([source](https://packages.ubuntu.com/noble/gcc)), for ARM Linux ([source](https://packages.ubuntu.com/noble/gcc-arm-linux-gnueabihf)) and AMD64 Windows ([source](https://packages.ubuntu.com/noble/gcc-mingw-w64-x86-64-posix)), moreover, it is acknowledged as a _de facto_ lowest supported distro needed for Windows cross compilation by [bitcoin#30580](bitcoin#30580 (comment)).

  Skipping the enforcement of newer minimum requirements is inadvisable, primarily because it will eventually conflict with upcoming code changes ([comment](bitcoin#30228 (comment))) like [dash#6378](#6378).

  ## Additional Information

  * Dependency for #6380

  * A default unprivileged user named `ubuntu` was introduced in Ubuntu 22.10 ([source](https://bugs.launchpad.net/cloud-images/+bug/2005129)) with UID `1000` and GID `1000`.

    We allow specifying UID and GID to ensure they match with the ownership of directories expected to be mounted to avoid permissions issues (especially on platforms like macOS where the user can have a UID of `501` and GID of `20`).
    * To retain this behavior, the `ubuntu` user and the `ubuntu` group will have its UID and GID updated. This is a no-op if defaults are selected.
    * In some cases where it may be undesirable to have the username or home directory deviate from the present name  (`dash`), it will be additionally renamed from `ubuntu`.
      * GitLab is unhappy if the container doesn't have a user named `dash` ([build](https://gitlab.com/dashpay/dash/-/jobs/9082688485#L24)) and it results in a runner failure.

  * Due to a conflict between `gcc-multilib` and `gcc-arm-linux-gnueabihf`, installation of the latter will result in the uninstallation of the former. This has been documented behavior for a while now ([source](https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/1300211)) and continues till today (see below).

    <details>

    <summary>Error message:</summary>

    ```
    ubuntu@ec46b76eeb2c:/src/dash$ sudo apt install gcc-multilib gcc-arm-linux-gnueabihf
    Reading package lists... Done
    Building dependency tree... Done
    Reading state information... Done
    gcc-arm-linux-gnueabihf is already the newest version (4:13.2.0-7ubuntu1).
    gcc-arm-linux-gnueabihf set to manually installed.
    Some packages could not be installed. This may mean that you have
    requested an impossible situation or if you are using the unstable
    distribution that some required packages have not yet been created
    or been moved out of Incoming.
    The following information may help to resolve the situation:

    The following packages have unmet dependencies:
     gcc-arm-linux-gnueabihf : Depends: gcc-13-arm-linux-gnueabihf (>= 13.2.0-11~) but it is not installable
    E: Unable to correct problems, you have held broken packages.
    ```

    </details>

    Since [dash#5372](#5372), we have stopped supporting i686 and dropped support for 32-bit Windows even earlier. There doesn't seem to be much reason to keep `gcc-multilib` around, especially since it _cannot_ be around and has been silently uninstalled for a while now, so the package has now been dropped.

    * Since Wine 7.0, WoW64 support has been included ([source](https://www.winehq.org/announce/7.0)), which allows for some applications to run without a corresponding `wine32` setup ([source](https://wiki.debian.org/Wine#Step_1:_Enable_multiarch)). Support has improved furthermore in Wine 9.0 ([source](https://gitlab.winehq.org/wine/wine/-/releases/wine-9.0)), which is available in `noble` ([source](https://packages.ubuntu.com/noble/wine64)). This allows us to drop the i386 conditional altogether.

  * `libncurses5`, while a valid package on `jammy` ([source](https://packages.ubuntu.com/jammy/libncurses5)), is not in any future version, including `noble` ([source](https://packages.ubuntu.com/noble/libncurses5), error page) though `libncurses5-dev` continues to remain a valid package ([source](https://packages.ubuntu.com/noble/libncurses5-dev)) and remains used as a Python dependency ([source](https://github.com/dashpay/dash/blob/1930572b05c53d2d8335bcfc22270871d5b0bf2f/contrib/containers/ci/Dockerfile#L91)). As a result, `libncurses5` has been dropped.

  * A bump in distro base also causes a bump in glibc version, which causes zlib, a Qt dependency to fail a compile-time check ([build](https://github.com/dashpay/dash/actions/runs/13220255380/job/36904408129?pr=6564#step:6:8050)), this is avoided by backporting [bitcoin#29985](bitcoin#29985).

  * Due to [QTBUG-133261](https://bugreports.qt.io/browse/QTBUG-133261), UBSan will raise a `float-cast-overflow` originating from `qRound(double)` ([build](https://gitlab.com/dashpay/dash/-/jobs/9083558880#L3132)), as of this writing, a fix is currently underway ([source](https://codereview.qt-project.org/c/qt/qtbase/+/621931)) but it is unclear when it would be available in the next Qt 5.15 revision.

    As this doesn't seem to be a regression ([source](https://bugreports.qt.io/browse/QTBUG-133261?focusedId=860311&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-860311)) despite being undesirable behavior, we can suppress the alarm.

  ## Checklist

  - [x] I have performed a self-review of my own code
  - [x] I have commented my code, particularly in hard-to-understand areas **(note: N/A)**
  - [x] I have added or updated relevant unit/integration/functional/e2e tests
  - [x] I have made corresponding changes to the documentation **(note: N/A)**
  - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_

ACKs for top commit:
  PastaPastaPasta:
    utACK 1599cc6
  UdjinM6:
    utACK 1599cc6

Tree-SHA512: 92f786e9da1440830057729a5d9cdf6448ef9da8c66e0d4c3b80da2e22dd599353f44a31dcbe0ed103febdf627d2a1a332d72de1c3ec312b6ceb665f4bbcb5d1
@kwvg kwvg marked this pull request as ready for review February 12, 2025 17:00
Copy link

coderabbitai bot commented Feb 12, 2025

Walkthrough

The changes update the project’s CI workflows, build configurations, source code, and fuzz testing framework. CI jobs related to the linux64_cxx20 target were removed from GitHub Actions and GitLab CI configurations. The project’s C++ standard was upgraded from C++17 to C++20 across multiple files, including CMakeLists.txt, Makefile, autoconf macros, and linting scripts. Several CI setup scripts and environment files were modified or removed, and inclusion directives were updated with IWYU pragmas where applicable. The fuzz testing targets underwent extensive refactoring, replacing the older FUZZ_TARGET_INIT macro with FUZZ_TARGET, which now explicitly specifies an initialization function via the .init parameter. Additional changes include updates in utility headers to use modern C++20 features (such as ranges) and adjustments in error checking and file timestamp handling in the wallet backup code.

✨ Finishing Touches
  • 📝 Generate Docstrings (Beta)

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (5)
src/test/fuzz/process_message.cpp (1)

44-44: Consider avoiding global state
LIMIT_TO_MESSAGE_TYPE is declared as a global std::string_view. Using a narrower scope for storing the environment-provided message type (such as within initialize_process_message or a dedicated configuration struct) can help avoid global side effects and potential concurrency pitfalls.

src/test/fuzz/fuzz.cpp (1)

70-74: Duplicate target names
Relying on try_emplace plus an assertion will crash if a duplicate name is registered. Consider a more descriptive error or fallback to handle collisions gracefully in the future.

src/util/ranges.h (1)

12-12: Mixed use of ranges
You’re invoking std::ranges::find_if(ds, fn) but still comparing to std::end(ds). For full consistency with <ranges>, consider using std::ranges::end(ds).

-    if (it != std::end(ds)) {
+    if (it != std::ranges::end(ds)) {

Also applies to: 14-22

src/test/fuzz/validation_load_mempool.cpp (1)

17-19: Consider encapsulating the global state.

The global testing setup pointer could be encapsulated within the initialization function to avoid potential issues with global state in tests.

-namespace {
-const TestingSetup* g_setup;
-} // namespace

 void initialize_validation_load_mempool()
 {
     static const auto testing_setup = MakeNoLogFileContext<const TestingSetup>();
-    g_setup = testing_setup.get();
+    static const TestingSetup* const setup = testing_setup.get();
+    return setup;
 }
depends/packages/qt.mk (1)

46-46: Consider using c++20 instead of c++2a.

While c++2a was the experimental name for C++20 during development, now that C++20 is standardized, it would be clearer and more consistent to use c++20 instead.

-$(package)_config_opts += -c++std c++2a
+$(package)_config_opts += -c++std c++20
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c84f5e1 and c4b3dac.

📒 Files selected for processing (59)
  • .github/workflows/build.yml (0 hunks)
  • .gitlab-ci.yml (0 hunks)
  • CMakeLists.txt (1 hunks)
  • build-aux/m4/ax_cxx_compile_stdcxx.m4 (6 hunks)
  • ci/dash/matrix.sh (0 hunks)
  • ci/test/00_setup_env_native_cxx20.sh (0 hunks)
  • ci/test/00_setup_env_native_fuzz.sh (1 hunks)
  • ci/test/04_install.sh (1 hunks)
  • configure.ac (1 hunks)
  • depends/Makefile (1 hunks)
  • depends/README.md (1 hunks)
  • depends/packages/qt.mk (1 hunks)
  • src/bitcoin-cli.cpp (1 hunks)
  • src/compat/assumptions.h (0 hunks)
  • src/fs.h (1 hunks)
  • src/net.cpp (1 hunks)
  • src/net_processing.cpp (1 hunks)
  • src/test/fuzz/addrman.cpp (3 hunks)
  • src/test/fuzz/banman.cpp (1 hunks)
  • src/test/fuzz/bip324.cpp (1 hunks)
  • src/test/fuzz/block.cpp (1 hunks)
  • src/test/fuzz/coins_view.cpp (1 hunks)
  • src/test/fuzz/connman.cpp (1 hunks)
  • src/test/fuzz/descriptor_parse.cpp (1 hunks)
  • src/test/fuzz/deserialize.cpp (1 hunks)
  • src/test/fuzz/fuzz.cpp (3 hunks)
  • src/test/fuzz/fuzz.h (1 hunks)
  • src/test/fuzz/i2p.cpp (1 hunks)
  • src/test/fuzz/integer.cpp (1 hunks)
  • src/test/fuzz/key.cpp (3 hunks)
  • src/test/fuzz/key_io.cpp (1 hunks)
  • src/test/fuzz/load_external_block_file.cpp (1 hunks)
  • src/test/fuzz/message.cpp (1 hunks)
  • src/test/fuzz/net.cpp (1 hunks)
  • src/test/fuzz/p2p_transport_serialization.cpp (4 hunks)
  • src/test/fuzz/parse_univalue.cpp (1 hunks)
  • src/test/fuzz/policy_estimator.cpp (1 hunks)
  • src/test/fuzz/policy_estimator_io.cpp (1 hunks)
  • src/test/fuzz/pow.cpp (1 hunks)
  • src/test/fuzz/process_message.cpp (3 hunks)
  • src/test/fuzz/process_messages.cpp (1 hunks)
  • src/test/fuzz/rpc.cpp (2 hunks)
  • src/test/fuzz/script.cpp (1 hunks)
  • src/test/fuzz/script_sigcache.cpp (1 hunks)
  • src/test/fuzz/script_sign.cpp (1 hunks)
  • src/test/fuzz/socks5.cpp (1 hunks)
  • src/test/fuzz/system.cpp (1 hunks)
  • src/test/fuzz/torcontrol.cpp (1 hunks)
  • src/test/fuzz/transaction.cpp (1 hunks)
  • src/test/fuzz/tx_pool.cpp (2 hunks)
  • src/test/fuzz/utxo_snapshot.cpp (1 hunks)
  • src/test/fuzz/validation_load_mempool.cpp (1 hunks)
  • src/test/fuzz/versionbits.cpp (1 hunks)
  • src/test/util/setup_common.h (1 hunks)
  • src/util/ranges.h (1 hunks)
  • src/util/trace.h (1 hunks)
  • src/validation.cpp (1 hunks)
  • src/wallet/wallet.cpp (2 hunks)
  • test/lint/lint-cppcheck-dash.sh (1 hunks)
💤 Files with no reviewable changes (5)
  • ci/dash/matrix.sh
  • ci/test/00_setup_env_native_cxx20.sh
  • src/compat/assumptions.h
  • .gitlab-ci.yml
  • .github/workflows/build.yml
✅ Files skipped from review due to trivial changes (7)
  • test/lint/lint-cppcheck-dash.sh
  • depends/Makefile
  • src/fs.h
  • src/test/util/setup_common.h
  • src/net_processing.cpp
  • src/validation.cpp
  • src/bitcoin-cli.cpp
🧰 Additional context used
🪛 Cppcheck (2.10-2)
src/test/fuzz/net.cpp

[error] 43-43: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/message.cpp

[error] 25-25: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/descriptor_parse.cpp

[error] 18-18: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/connman.cpp

[error] 32-32: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/key_io.cpp

[error] 22-22: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/torcontrol.cpp

[error] 42-42: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/policy_estimator_io.cpp

[error] 19-19: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/process_messages.cpp

[error] 36-36: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/socks5.cpp

[error] 28-28: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/integer.cpp

[error] 50-50: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/i2p.cpp

[error] 20-20: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/utxo_snapshot.cpp

[error] 27-27: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/script_sign.cpp

[error] 33-33: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/parse_univalue.cpp

[error] 21-21: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/block.cpp

[error] 25-25: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/script_sigcache.cpp

[error] 26-26: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/script.cpp

[error] 36-36: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/pow.cpp

[error] 24-24: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/policy_estimator.cpp

[error] 23-23: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/validation_load_mempool.cpp

[error] 27-27: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/versionbits.cpp

[error] 114-114: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/rpc.cpp

[error] 340-340: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/bip324.cpp

[error] 22-22: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/banman.cpp

[error] 43-43: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/key.cpp

[error] 36-36: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/tx_pool.cpp

[error] 122-122: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/addrman.cpp

[error] 48-48: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/system.cpp

[error] 30-30: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/process_message.cpp

[error] 64-64: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/p2p_transport_serialization.cpp

[error] 31-31: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/load_external_block_file.cpp

[error] 26-26: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/coins_view.cpp

[error] 47-47: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/transaction.cpp

[error] 28-28: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

🪛 LanguageTool
depends/README.md

[uncategorized] ~111-~111: Loose punctuation mark.
Context: ...sed. Defaults to c11. - CXX_STANDARD: Set the C++ standard version used. Defa...

(UNLIKELY_OPENING_PUNCTUATION)

⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: Build container / Build container
  • GitHub Check: predict_conflicts
🔇 Additional comments (58)
src/test/fuzz/process_message.cpp (3)

8-8: New headers appear appropriate
These newly introduced headers (<primitives/transaction.h>, <serialize.h>, <span.h>, <sync.h>, <cstdlib>, <string_view>, and <vector>) match the functionalities added or used below. No issues found.

Also applies to: 11-12, 14-14, 35-35, 39-40


64-67: FUZZ_TARGET integration
The usage of FUZZ_TARGET(process_message, .init = initialize_process_message) and its callback function is consistent with the new fuzzing framework’s initialization pattern. The unknown macro warning from Cppcheck is likely a false positive requiring configuration.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 64-64: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)


70-71: Check for time dependency
Mocking the time to a fixed value is useful for reproducible fuzz tests. However, be aware of any downstream logic that might inadvertently rely on real-time behavior (e.g., timeouts or time-based checks).

src/test/fuzz/fuzz.cpp (6)

17-19: Updated includes
These includes (<cstdio>, <cstdlib>, <cstring>, <iostream>, <utility>) directly correlate with the file operations, environment handling, and standard I/O used here, ensuring proper declarations.

Also applies to: 23-23, 27-27


59-62: FuzzTarget struct usage
Encapsulating both the input function and its options into a single struct contributes to clearer organization and code maintainability compared to more ad-hoc approaches.


64-68: FuzzTargets storage
Storing fuzz targets in a static std::map<std::string_view, FuzzTarget> is efficient. Ensure the string data referenced by std::string_view remains valid (e.g., if it’s not pointing to a temporary).


92-110: Single-exit model
The newly introduced should_exit variable effectively centralizes exit flow after printing or writing fuzz targets. If multiple environment variables are set (e.g., both printing and writing), you’ll gather partial output from each before exiting. Verify that this combined behavior is intentional.


113-115: Environment-variable caching
Copying env_fuzz into g_copy before using it ensures consistency in the presence of fuzz-engine rewrites or ephemeral environment memory. Good practice for stable usage.


127-128: Initializing the fuzz target
Assigning g_test_one_input and calling the registered opts.init() ensures correct setup. Confirm that any dependencies for the fuzz target are also initialized here, if needed.

src/util/ranges.h (1)

9-9: Transition to <ranges>
Incorporating <ranges> (C++20) significantly simplifies operations previously handled by macros or manual implementations. This change increases code clarity and maintainability.

src/test/fuzz/descriptor_parse.cpp (1)

18-18: LGTM! Macro update aligns with the new initialization pattern.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET with an explicit .init parameter improves code clarity while maintaining the same functionality.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 18-18: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/policy_estimator_io.cpp (1)

19-19: LGTM! Macro update maintains optimization pattern.

The change to FUZZ_TARGET with explicit initialization preserves the efficient reuse of the static block_policy_estimator.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 19-19: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/validation_load_mempool.cpp (1)

27-27: LGTM! Macro update follows the new pattern.

The change to FUZZ_TARGET with explicit initialization maintains consistency with other fuzz tests.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 27-27: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/key_io.cpp (1)

22-22: LGTM! Macro update preserves comprehensive test coverage.

The change to FUZZ_TARGET with explicit initialization maintains the thorough key encoding/decoding test coverage.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 22-22: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/fuzz.h (3)

24-27: LGTM! Well-structured options class.

The new FuzzTargetOptions struct provides a clean and extensible way to configure fuzz targets. The default values are sensible, and the use of a lambda for the default initialization function is elegant.


29-29: LGTM! Clean function signature.

The updated function signature using FuzzTargetOptions improves maintainability by encapsulating related parameters.


31-41: LGTM! Improved macro implementation.

The new macro implementation with variadic arguments provides a more flexible way to configure fuzz targets while maintaining backward compatibility.

src/test/fuzz/load_external_block_file.cpp (1)

26-26: LGTM! Updated to new initialization syntax.

The fuzz target has been correctly updated to use the new initialization syntax without changing its functionality.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 26-26: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/i2p.cpp (1)

20-20: LGTM! Updated to new initialization syntax.

The fuzz target has been correctly updated to use the new initialization syntax without changing its functionality.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 20-20: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/message.cpp (1)

25-25: LGTM! Updated to new initialization syntax.

The fuzz target has been correctly updated to use the new initialization syntax without changing its functionality.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 25-25: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/socks5.cpp (1)

28-28: LGTM! Macro updated to new syntax.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET(.init = ...) aligns with the broader initiative to modernize the codebase.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 28-28: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/script_sigcache.cpp (1)

26-26: LGTM! Macro updated to new syntax.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET(.init = ...) maintains consistency with other fuzz test files.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 26-26: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/util/trace.h (1)

16-28: LGTM! Simplified tracing macros.

The removal of warning suppression macros (BITCOIN_DISABLE_WARN_ZERO_VARIADIC_PUSH/POP) and direct use of DTRACE_PROBE functions results in cleaner, more maintainable code. This change is safe as the project now requires C++20, where these warnings are no longer relevant.

src/test/fuzz/torcontrol.cpp (1)

42-42: LGTM! Macro updated to new syntax.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET(.init = ...) maintains consistency with other fuzz test files.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 42-42: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/parse_univalue.cpp (1)

21-21: LGTM! Clean upgrade to the new fuzz target syntax.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET with named parameter .init is correctly applied, maintaining the same initialization function while adopting the modern C++20 syntax.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 21-21: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/process_messages.cpp (1)

36-36: LGTM! Clean upgrade to the new fuzz target syntax.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET with named parameter .init is correctly applied, maintaining the same initialization function while adopting the modern C++20 syntax.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 36-36: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/block.cpp (1)

25-25: LGTM! Clean upgrade to the new fuzz target syntax.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET with named parameter .init is correctly applied, maintaining the same initialization function while adopting the modern C++20 syntax.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 25-25: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/net.cpp (1)

43-43: LGTM! Clean upgrade to the new fuzz target syntax.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET with named parameter .init is correctly applied, maintaining the same initialization function while adopting the modern C++20 syntax.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 43-43: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/utxo_snapshot.cpp (1)

27-27: LGTM! Clean macro update.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET(.init = ...) improves code clarity by making the initialization more explicit while maintaining the same functionality.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 27-27: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/policy_estimator.cpp (1)

23-23: LGTM! Clean macro update.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET(.init = ...) improves code clarity by making the initialization more explicit while maintaining the same functionality.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 23-23: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/pow.cpp (1)

24-24: LGTM! Clean macro update.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET(.init = ...) improves code clarity by making the initialization more explicit while maintaining the same functionality.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 24-24: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/banman.cpp (1)

43-43: LGTM! Clean macro update.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET(.init = ...) improves code clarity by making the initialization more explicit while maintaining the same functionality.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 43-43: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/bip324.cpp (1)

22-22: LGTM! The fuzz target macro update is consistent with the codebase-wide changes.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET with explicit .init parameter maintains the same functionality while following the new pattern.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 22-22: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/system.cpp (1)

30-30: LGTM! The fuzz target macro update aligns with the standardized pattern.

The change maintains the same initialization behavior while adopting the new macro syntax.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 30-30: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/connman.cpp (1)

32-32: LGTM! The fuzz target macro update follows the standardized pattern.

The change maintains the same initialization behavior while adopting the new macro syntax.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 32-32: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/script.cpp (1)

36-36: LGTM! The fuzz target macro update is consistent with the codebase-wide changes.

The change maintains the same initialization behavior while adopting the new macro syntax.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 36-36: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/script_sign.cpp (1)

33-33: LGTM! Improved macro syntax for fuzz target initialization.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET with explicit .init parameter enhances code clarity while maintaining the same functionality.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 33-33: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/integer.cpp (1)

50-50: LGTM! Consistent update to fuzz target initialization.

The macro update follows the same pattern as other files, improving code clarity.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 50-50: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/deserialize.cpp (1)

48-49: LGTM! Updated macro definition for consistent fuzz target initialization.

The change to use FUZZ_TARGET with .init parameter in the FUZZ_TARGET_DESERIALIZE macro definition maintains consistency with other fuzz testing files.

src/test/fuzz/key.cpp (1)

36-36: LGTM! Consistent updates to all fuzz target initializations.

All three fuzz targets (key, ellswift_roundtrip, and bip324_ecdh) have been updated to use the new FUZZ_TARGET macro with explicit .init parameter, maintaining consistency across the codebase.

Also applies to: 264-264, 283-283

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 36-36: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/rpc.cpp (2)

340-340: LGTM! Fuzz target initialization updated.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET with .init parameter aligns with the broader update across the codebase.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 340-340: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)


360-360: LGTM! Using C++20's starts_with method.

The change from rfind to starts_with is a good improvement, leveraging C++20's string handling features for more readable and efficient code.

src/test/fuzz/addrman.cpp (1)

48-48: LGTM! Fuzz target initializations updated consistently.

All three fuzz targets have been updated from FUZZ_TARGET_INIT to FUZZ_TARGET with .init parameter, maintaining consistency across the codebase.

Also applies to: 235-235, 316-316

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 48-48: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/versionbits.cpp (1)

114-114: LGTM! Fuzz target initialization updated.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET with .init parameter maintains consistency with other fuzz testing files.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 114-114: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

configure.ac (1)

81-82: LGTM! Enforcing C++20 standard.

The change to require C++20 compiler support is consistent with the PR objectives and properly enforces the standard without GNU extensions.

build-aux/m4/ax_cxx_compile_stdcxx.m4 (1)

13-14: LGTM! C++20 support properly implemented.

The changes correctly add C++20 support to the build system:

  1. Documentation updated to include C++20
  2. C++20 added to supported versions
  3. Test body for C++20 added with proper feature test macro support

Also applies to: 55-55, 980-1005

src/test/fuzz/tx_pool.cpp (1)

122-122: LGTM! Updated fuzz target macro syntax.

The changes correctly update the fuzz target macro syntax to use the new initialization format while preserving the existing functionality.

Also applies to: 296-296

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 122-122: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/p2p_transport_serialization.cpp (1)

31-31: LGTM! Updated fuzz target macro syntax.

The changes correctly update the fuzz target macro syntax to use the new initialization format while preserving the existing functionality for all four fuzz targets.

Also applies to: 373-373, 384-384, 395-395

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 31-31: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/wallet/wallet.cpp (2)

25-25: LGTM!

The addition of reverse_iterator.h header is appropriate as it's used by the modified code in AutoBackupWallet function.


855-884: LGTM! Improved timestamp handling using filesystem types.

The changes correctly switch from using std::time_t to fs::file_time_type for file timestamps, which is more appropriate for filesystem operations. The new code also uses modern filesystem iteration with fs::directory_iterator and fs::last_write_time.

The changes bring several benefits:

  • More accurate file timestamp handling using filesystem-specific types
  • Better integration with the filesystem library
  • Cleaner and more idiomatic code
src/net.cpp (2)

1117-1126: LGTM! Excellent refactoring of V2ShortIDs.

The new implementation is more efficient and idiomatic, using modern C++ features like std::fill and std::copy instead of loops. The constexpr function enables compile-time evaluation, and the code is more maintainable.


1118-1119: Important protocol safety checks.

The static assertions ensure protocol compatibility by verifying that:

  1. Bitcoin IDs stay within their allocated range (0-127)
  2. Dash IDs stay within their allocated range (128-255)

This prevents potential protocol incompatibilities and message type collisions.

ci/test/00_setup_env_native_fuzz.sh (1)

13-13: LGTM! The added warning flag aligns with C++20 migration.

The addition of -Wno-deprecated-volatile to suppress warnings about deprecated volatile qualifiers is appropriate as part of the C++20 migration, where certain uses of the volatile keyword have been deprecated.

CMakeLists.txt (1)

11-11: LGTM! C++ standard updated to C++20.

The update to C++20 aligns with the PR objectives. Note that this CMakeLists.txt is a dummy project for CLion IDE support and doesn't affect the actual build process.

ci/test/04_install.sh (1)

88-92: LGTM! Enhanced debugging with qa-assets version info.

The added subshell block improves debugging by displaying the commit information of the qa-assets repository. The use of a subshell ensures proper directory handling.

depends/README.md (1)

111-111: LGTM! Updated C++ standard in dependency options.

The documentation correctly reflects the upgrade to C++20 as the default C++ standard, consistent with the PR's objective.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~111-~111: Loose punctuation mark.
Context: ...sed. Defaults to c11. - CXX_STANDARD: Set the C++ standard version used. Defa...

(UNLIKELY_OPENING_PUNCTUATION)

src/test/fuzz/transaction.cpp (1)

28-28: LGTM! Updated to modern fuzz target syntax.

The change from FUZZ_TARGET_INIT to FUZZ_TARGET with explicit .init parameter improves code clarity by making the initialization more explicit.

🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 28-28: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

src/test/fuzz/coins_view.cpp (1)

47-47: LGTM! Fuzz target initialization updated to use named parameter syntax.

The change from FUZZ_TARGET_INIT(coins_view, initialize_coins_view) to FUZZ_TARGET(coins_view, .init = initialize_coins_view) aligns with the broader pattern of fuzz testing framework updates across the codebase. The new syntax using named parameters improves readability and maintainability.

Let's verify this pattern is consistently applied across other fuzz testing files:

✅ Verification successful

🏁 Script executed:

#!/bin/bash
# Description: Check for consistent usage of the new FUZZ_TARGET syntax across fuzz testing files.

# Search for any remaining old FUZZ_TARGET_INIT usage
echo "Checking for old FUZZ_TARGET_INIT usage:"
rg "FUZZ_TARGET_INIT" src/test/fuzz/

# Search for new FUZZ_TARGET usage
echo -e "\nChecking new FUZZ_TARGET usage:"
rg "FUZZ_TARGET\([^)]+\.init\s*=" src/test/fuzz/

Length of output: 3986


LGTM! Fuzz target initialization across the fuzz tests is using the new named parameter syntax consistently.

  • No usage of the old FUZZ_TARGET_INIT macro remains in the fuzz testing files.
  • In particular, src/test/fuzz/coins_view.cpp now uses FUZZ_TARGET(coins_view, .init = initialize_coins_view) as expected.
  • Other fuzz testing files are also updated to the new syntax.
🧰 Tools
🪛 Cppcheck (2.10-2)

[error] 47-47: There is an unknown macro here somewhere. Configuration is required. If FUZZ_TARGET is a macro then please configure it.

(unknownMacro)

Comment on lines +49 to +51
if (const auto val{std::getenv("LIMIT_TO_MESSAGE_TYPE")}) {
LIMIT_TO_MESSAGE_TYPE = val;
Assert(std::count(getAllNetMessageTypes().begin(), getAllNetMessageTypes().end(), LIMIT_TO_MESSAGE_TYPE)); // Unknown message type passed
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Improve error handling for invalid environment variable
Currently, this uses an assertion to handle unknown message types, which will abort the fuzzing session if the variable is set incorrectly. As a refinement, consider logging a warning and ignoring the variable to allow fuzzing to proceed.

Copy link
Member

@PastaPastaPasta PastaPastaPasta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

light utACK c4b3dac

Copy link

@UdjinM6 UdjinM6 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

@PastaPastaPasta PastaPastaPasta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Currently unable to merge in due to configure error:

checking whether /opt/homebrew/opt/llvm/bin/clang accepts -g... yes
checking for /opt/homebrew/opt/llvm/bin/clang option to enable C++11 features... none needed
checking whether make supports the include directive... yes (GNU style)
checking dependency style of /opt/homebrew/opt/llvm/bin/clang... gcc3
checking whether /opt/homebrew/opt/llvm/bin/clang supports C++20 features with -std=c++20... no
checking whether /opt/homebrew/opt/llvm/bin/clang supports C++20 features with +std=c++20... no
checking whether /opt/homebrew/opt/llvm/bin/clang supports C++20 features with -h std=c++20... no
configure: error: *** A compiler with support for C++20 language features is required.

this is with both system clang16 and brew clang19

Not clear if this is me messing something up, or a true issue

@kwvg
Copy link
Collaborator Author

kwvg commented Feb 15, 2025

@PastaPastaPasta is the issue still present? Unable to reproduce locally.

@kwvg kwvg requested a review from PastaPastaPasta February 15, 2025 08:55
@PastaPastaPasta
Copy link
Member

Was able to successfully build in a fresh clone

Copy link
Member

@PastaPastaPasta PastaPastaPasta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

light ACK c4b3dac

@PastaPastaPasta PastaPastaPasta merged commit d9704d3 into dashpay:develop Feb 15, 2025
32 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants